package br.com.quad.dao;

import java.util.List;


import br.com.quad.bean.Cliente;


public class ClienteDAOHibernate implements ClienteDAO {
	
	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<Cliente> hibernateDAO = null;
	
	public ClienteDAOHibernate() {
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getClienteDAO();
	}
	

	@Override
	public Cliente inserir(Cliente cliente) throws Exception {
		try {
			cliente = (Cliente) hibernateDAO.add(cliente);
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 
		return cliente;
	}

	@Override
	public boolean alterar(Cliente cliente) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.update(cliente);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}

		return ok;
	}

	@Override
	public boolean isExclusaoLiberada(Cliente cliente) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean excluir(Cliente cliente) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.remove(cliente);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Cliente> getSelecionar(int codigoCliente, String nome,
			String CPF_CNPJ, String RG_IE, String tipo) {
		
		String 	sql = "FROM Cliente WHERE codigoCliente <> 0 ";

		if ((codigoCliente != 0 )) {
			sql += " and codigoCliente = " + codigoCliente + " ";  
		}
		
		if (!(nome.isEmpty())) {
			sql += " AND nome like '" + nome + "%' ";  
		}
		
		if (!(CPF_CNPJ.isEmpty())) {
			sql += " AND CPF_CNPJ = '" + CPF_CNPJ + "' ";  
		}
		
		if (!(RG_IE.isEmpty())) {
			sql += " AND (RG_IE = '" + RG_IE + "')  ";  
		}
		
		if  (!(tipo.isEmpty()))  {
			sql += " AND tipo = '" + tipo + "' ";  
		}
					
		sql += " ORDER BY nome";		
 
		List<Cliente> lista = hibernateDAO.getSession().createQuery(sql).list();
		
		return lista;
	}

	@Override
	public Cliente getCliente(int codigoCliente) {
		// TODO Auto-generated method stub
		return hibernateDAO.get(codigoCliente);
	}

	@Override
	public List<Cliente> getListarTodos() {
		return hibernateDAO.listAll();
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean isExiste(Cliente cliente) {
		String 	sql = 	" From Cliente " +
		"Where codigoCliente !="+cliente.getCodigoCliente()+" and"+
		"	(CPF_CNPJ	 = '" + cliente.getCPF_CNPJ() + "' OR"+
		"	(RG_IE = '" + cliente.getRG_IE() + "' AND UFRG_IE = '"+cliente.getUFRG_IE() +"')) ";
		

		List<Cliente> lista = hibernateDAO.getSession().createQuery(sql).list();
		
		if (lista.size()<1) {
			return false;
		} else {
			return true;
		}

	}
	
	@Override
	public void inicialize(Cliente cliente){
		
		/**
		 *  Grupo g = DAOFactory.getGrupoDAO().getGrupo(grupo.getCodigoGrupo());
		    g.getAreas();
			grupo.setAreas(g.getAreas());
		**/
		
		
//Cliente c = DAOFactory.getClienteDAO().getCliente(cliente.getCodigoCliente());
//		c.getVeiculos();		
		
	}

}
